/*
 * test_casinfo.cpp
 *  CascadeInfo二进制格式分类器数据文件转json格式的工具
 *  Created on: 2016年3月14日
 *      Author: guyadong
 */
#include <iostream>
#include <sstream>
#include "detect_cl.h"
#include "cmdline.h"
#include "casinfo.h"

using namespace gdface;
using namespace std;
int main(int argc, char * argv[]){
	try{
		cmdline::parser parser;
		parser.add<std::string>("casinfo", 'c', "cascadeInfo file", false,"CascadeInfo"); // (二进制)分类器文件名,默认CascadeInfo
		parser.add<std::string>("output", 'o', "output folder", false,"."); // 输出文件路径，默认当前目录
		parser.add<int>("level", 'l', "scale level num",false, (int)SCALE_SIZE); // 放大级数
		parser.add<float>("ratio", 'r', "magnify_ratio",false, DETECT_WIN_SCALE_RATIO); // 放大倍率
		parser.add("compress", 'z', "save compressd json "); // 压缩json
		parser.add("base64", 'b', "save compressed  json to base64 string "); // 将压缩后的json转为base64字符串
		parser.add("full", 'f', "save all level feathers"); // 保存所有级别分类器
		parser.parse_check(argc, argv);
		auto casinfo_file=parser.get<string>("casinfo");
		auto cas=load_casinfo_file(casinfo_file,parser.get<int>("level"),parser.get<float>("ratio"));
		auto output_folder = parser.get<string>("output");
		if (output_folder==".")output_folder = getcwd();
		string output_file=path_concate(output_folder, tolower(get_file_name(casinfo_file)).append("_json"));
		auto compress=parser.exist("compress");
		auto base64=parser.exist("base64");
		if(compress){
			if(base64)
				output_file.append("_compressed_base64.txt");
			else
				output_file.append("_compressed");
		}else
			output_file.append(".txt");
		auto out_str=casinfo_to_json_str(cas,parser.exist("full"),compress,base64);
		save_binary_file(output_file.data(),out_str.data(),out_str.size());
		std::cout << output_file << " saved,size=" << out_str.size() << std::endl;
	}
	catch (std::exception &e) {
		std::cout << e.what() << std::endl;
	}
}


